package cn.tedu.project.oa.sys.user.service.impl;


import cn.tedu.project.oa.base.util.RedisUtil;
import cn.tedu.project.oa.sys.user.pojo.vo.CaptchaVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.UUID;

/**
 * @Description: 验证码服务类，提供验证码缓存服务。
 * @Author: Miles
 */
@Slf4j
@Service
public class CaptchaService {

    // 从配置文件中获取会话超时时间，默认为300秒（5分钟）
    @Value("${server.session.timeout:300}")
    private Long timeout;

    // 自动注入 Redis 工具类，用于缓存验证码
    @Autowired
    private RedisUtil redisUtils;

    // 定义 Redis 中存储验证码的键前缀
    @Value("${captcha.redis.key.prefix}")
    private String captchaKeyPrefix;

    /**
     * 缓存验证码
     *
     * @param captcha 生成的验证码字符串
     * @return 包含验证码信息的 CaptchaVO 对象
     */
    public CaptchaVO cacheCaptcha(String captcha) {

        // 生成一个随机的 UUID 作为验证码的唯一标识符
        String captchaKey = UUID.randomUUID().toString();

        // 将验证码缓存到 Redis，并设置过期时间
        redisUtils.set(captchaKeyPrefix.concat(captchaKey), captcha, timeout);

        // 创建 CaptchaVO 对象，用于返回验证码的键和过期时间
        CaptchaVO captchaVO = new CaptchaVO();
        captchaVO.setCaptchaKey(captchaKey);
        captchaVO.setExpire(timeout);

        // 记录调试信息，输出缓存的验证码和对应的键
        log.debug("缓存验证码：{}", captcha);
        log.debug("验证码key：{}", captchaKey);

        return captchaVO;
    }
}
